package dto

import "encoding/json"

// GoodsDetailDto 商品明细DTO
//
// @author liaochangyi
// @since 2025-01-25
type GoodsDetailDto struct {
	GoodsId      *string `json:"goods_id,omitempty"`       // 商品编码
	WxpayGoodsId *string `json:"wxpay_goods_id,omitempty"` // 微信侧商品编码
	GoodsName    *string `json:"goods_name,omitempty"`     // 商品名称
	Quantity     *string `json:"quantity,omitempty"`       // 商品数量
	Price        *string `json:"price,omitempty"`          // 商品单价
}

// NewGoodsDetailDto 创建新的商品明细DTO实例
func NewGoodsDetailDto() *GoodsDetailDto {
	return &GoodsDetailDto{}
}

// SetGoodsId 设置商品编码
func (g *GoodsDetailDto) SetGoodsId(goodsId string) *GoodsDetailDto {
	g.GoodsId = &goodsId
	return g
}

// SetWxpayGoodsId 设置微信侧商品编码
func (g *GoodsDetailDto) SetWxpayGoodsId(wxpayGoodsId string) *GoodsDetailDto {
	g.WxpayGoodsId = &wxpayGoodsId
	return g
}

// SetGoodsName 设置商品名称
func (g *GoodsDetailDto) SetGoodsName(goodsName string) *GoodsDetailDto {
	g.GoodsName = &goodsName
	return g
}

// SetQuantity 设置商品数量
func (g *GoodsDetailDto) SetQuantity(quantity string) *GoodsDetailDto {
	g.Quantity = &quantity
	return g
}

// SetPrice 设置商品单价
func (g *GoodsDetailDto) SetPrice(price string) *GoodsDetailDto {
	g.Price = &price
	return g
}

// ToJSON 转换为JSON字符串
func (g *GoodsDetailDto) ToJSON() (string, error) {
	data, err := json.Marshal(g)
	if err != nil {
		return "", err
	}
	return string(data), nil
}

// FromJSON 从JSON字符串创建实例
func (g *GoodsDetailDto) FromJSON(jsonStr string) error {
	return json.Unmarshal([]byte(jsonStr), g)
}
